//
// Created by Administrator on 2023/4/26.
/*

2023春季伴学挑战赛06：C++语言
http://www.aisichuang.net/#/main/Competition/TitlePage?id=1309&raceId=1304&stateanswer=false
    时间限制: 1000 MS 内存限制: 256 MB

数字游戏《2048》
题目描述

有一款数字合成的游戏，叫做《2048》：玩家会得到很多数字，每个数字都是 2 的幂，
 玩家可以挑选两个一样大的数字，将它们合成一个新的数字，新数字为原数字的两倍大小。
 如果这种合成操作可以不断地进行，给定小爱在最初获得的数字集合，请帮她算一下能够获得的最大数字。

2 的幂是指多个2相乘的结果。如 4是2的2次方、256是2的8次方 等等。
输入格式
第一行：单个正整数 n(1≤n≤100)，表示小爱一开始拥有的数字数量；
第二行：n 个正整数 a1,a2,⋯,an，表示刚开始时获得的数字，保证每个数字都是 2 的幂。
输出格式

单个正整数：表示最后可以得到的最大数字大小。（数据保证可以合成的最大数字不超过2048）
样例 #1
样例输入 #1
5
4 1 2 1 1
样例输出 #1
8
提示
【样例说明】

原序列中的两个’1’可以合成’2’，新合成的’2’与原序列中的’2’可以继续合成’4’，新合成的’4’与原序列中的’4’可以继续合成’8’。

当前序列中只剩下了’1’和’8’，可以得到的最大数字是8。


 * */
//pass

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int l[n];
    for (int j = 0; j < n; ++j)
    {
        cin >> l[j];
    }
    for (int i = 0; i < 12; ++i)
    {
//        cout<<pow(2,i)<<endl;
        int t = pow(2, i);
        int count = 0;
        for (int j = 0; j < n; ++j)
        {
            if (l[j] == t)
            {
                count++;
                if (count % 2 == 0)
//              if (count % 2 == 0 and count > 0)
                    l[j] = t * 2;
//                printf("%d ",l[j]);
            }
//            if (count<=1)
//                break;
        }

//        printf("%d\n",t);
    }
    int big = 0;
    for (int k = 0; k < n; ++k)
    {
        big = l[k] > big ? l[k] : big;
//        printf("%d ", l[k]);
    }
    cout << big;
    return 0;
}

